<?php


namespace app\common;


class AES
{
    /**
     * openssl 加密函数
     *
     * @ $entry 需要加密的内容
     * @ $key   加密的 key，需要与解密的 key 值要一致
     * @ $iv    盐值
     *
     * 加默认值是为了防止程序报错，实际使用中不要使用默认值
     */
    public function encrypt($entry, $key = 'viPTaL16hmhjs6LD', $iv = '0iX6Bsjt39SnM1aI7FE3')
    {
        $entry = serialize($entry);
        $data['iv'] = base64_encode(substr($iv, 0, 16));
        $data['value'] = openssl_encrypt($entry, 'AES-256-CBC', $key, 0, base64_decode($data['iv']));
        $encrypt = base64_encode(json_encode($data));
        return $encrypt;
    }

    /**
     * openssl 解密函数
     *
     * @ $encrypt 需解密的内容
     * @ $key     解密的 key，需要与加密的 key 值一致
     *
     * 加默认值是为了防止程序报错，实际使用中不要使用默认值
     */
    public function decrypt($encrypt, $key = 'viPTaL16hmhjs6LD')
    {
        $encrypt = json_decode(base64_decode($encrypt), true);
        $iv = base64_decode($encrypt['iv']);
        $decrypt = openssl_decrypt($encrypt['value'], 'AES-256-CBC', $key, 0, $iv);
        $result = unserialize($decrypt);
        if ($result) {
            return $result;
        } else {
            return 0;
        }
    }
}